﻿using DAL;
using IService;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Mvc;
using Model;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
using System;

namespace WMS.Controllers
{

    public class GoodsTypeController : Controller
    {
        private readonly IGoodsTypeService _goodsTypeService;
        public GoodsTypeController(IGoodsTypeService goodsTypeService)
        {
            _goodsTypeService = goodsTypeService;
        }


        public IActionResult Index()
        {

            return View();
        }
        [HttpGet]
        public async Task<IActionResult> GetServerAsync()
        {
            // 调用服务层获取所有货品类型列表（返回值是List<GoodsType>）
            var goodsTypeList = await _goodsTypeService.GoodsTypesAllAsync();

            // 判断列表是否有效（不为null且有数据）
            if (goodsTypeList != null && goodsTypeList.Count > 0)
            {
                // 有数据：返回200 OK + 列表数据
                return Ok(goodsTypeList);
            }
            else
            {
                // 无数据：返回空列表或提示信息（避免前端处理null异常）
                return Ok(goodsTypeList ?? new List<GoodsType>());
            }
        }

        /// <summary>
        /// 模糊查询货品类型（带筛选条件）
        /// </summary>
        [HttpGet]
public async Task<IActionResult> GoodsTypes(
    string TypeNameOrCode = "",
    int? Status = null,
    string UpdateBy = "",
    DateTime? startTime = null,
    DateTime? endTime = null,
    int PageNum = 1,
    int PageSize = 10
)
{
    Console.WriteLine($"接收参数：startTime={startTime:yyyy-MM-dd}, endTime={endTime:yyyy-MM-dd}, PageNum={PageNum}, PageSize={PageSize}");

    // 1. 分页参数校验
    PageNum = PageNum < 1 ? 1 : PageNum;
    PageSize = PageSize < 1 || PageSize > 100 ? 10 : PageSize;

    try
    {
        // 2. 调用服务层分页方法（需在IService/Service中实现）
        // 假设服务层返回 PagedResult<GoodsType>（包含Total总条数和List当前页数据）
        var pagedResult = await _goodsTypeService.GetPagedGoodsTypes(
            typeNameOrCode: TypeNameOrCode,
            status: Status,
            updateBy: UpdateBy,
            startTime: startTime,
            endTime: endTime,
            pageNum: PageNum,
            pageSize: PageSize
        );

        // 3. 返回分页结构（与前端分页逻辑对齐：total=总条数，list=当前页数据）
        return Ok(new {
            total = pagedResult.Total,  // 总记录数（前端用于计算总页数）
            list = pagedResult.List    // 当前页数据（前端表格渲染用）
        });
    }
    catch (Exception ex)
    {
        // 异常处理：返回错误信息便于前端排查
        Console.WriteLine($"分页查询异常：{ex.Message}");
        return StatusCode(500, new { message = "分页查询失败：" + ex.Message });
    }
}
        [HttpPost]
        public async Task<IActionResult> GetAddGoodsTypes(string ParentCategoryId, string GoodsTypeCode, string GoodsTypeName, int SortOrder, int Status, string Remarks)
        {
            var result = await _goodsTypeService.GoodsTypesAdd(ParentCategoryId, GoodsTypeCode, GoodsTypeName, SortOrder, Status, Remarks);
            if (result != null && result.Any())
            {
                return Ok(result); // 新增成功，返回新增的货品类型列表
            }
            else
            {
                return BadRequest("货品类型新增失败"); // 新增失败，返回错误提示
            }
        }

        [HttpPut]
        public async Task<IActionResult> UpdateGoodsTypes(int GoodsTypeId, string ParentCategoryId, string GoodsTypeCode, string GoodsTypeName, int SortOrder, int Status, string Remarks)
        {
            var result = await _goodsTypeService.GoodsTypesUpdate(GoodsTypeId, ParentCategoryId, GoodsTypeCode, GoodsTypeName, SortOrder, Status, Remarks);
            if (result != null && result.Any())
            {
                return Ok(result); // 新增成功，返回新增的货品类型列表
            }
            else
            {
                return BadRequest("货品类型修改失败"); // 新增失败，返回错误提示
            }
        }
        [HttpPut]
        public async Task<IActionResult> LogicalDelete([FromQuery] int goodsTypeId)
        {
            
            Console.WriteLine("接收的goodsTypeId：" + goodsTypeId); // 打印参数值
            int affectedRows = await _goodsTypeService.GoodsTypesDelete(goodsTypeId);

            if (affectedRows == 0)
            {
                // 记录不存在或已删除，返回404（当前逻辑）
                return NotFound(new { success = false, message = "未找到该货品类型或已被删除" });

                // 可选：如果允许重复删除，可返回成功（根据业务需求调整）
                // return Ok(new { success = true, message = "删除成功（该记录可能已被删除）" });
            }

            return Ok(new { Success = true, Message = "删除成功" });
        }

    }
}
